package com.bw.controller;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.bw.common.JwtUtils;
import com.bw.common.Md5Utils;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Controller
public class LoginController {


    @Autowired
    UserMapper userMapper;

    @RequestMapping("/loginPage.do")
    public String loginPage(HttpServletRequest request) {
//        Cookie[] cookies = request.getCookies();

//        System.out.println("loginPage.do 浏览器自动发送过来的cookie：" + JSON.toJSONString(cookies));
        return "login";

    }


    @RequestMapping("/login.do")
    public String login(User loginUser, Model model, HttpServletRequest request, HttpServletResponse response) {

        if (StrUtil.isBlank(loginUser.getName())) { // 判断用户名是否为空
            // 给登录页面返回一个错误提示
            model.addAttribute("error", "用户名不为空");

            return "login";
        }
        if (StrUtil.isBlank(loginUser.getPassword())) { // 判断密码是否为空
            // 给登录页面返回一个错误提示
            model.addAttribute("error", "密码不为空");

            return "login";
        }

        // 验证用户名是否存在    见名知意
        User userFromDB = userMapper.selectByName(loginUser.getName());

        if (userFromDB == null) {
            // 给登录页面返回一个错误提示
            model.addAttribute("error", "用户不存在");
            return "login";
        }

        // 密码是否正确
        String loginUserPassword = loginUser.getPassword(); //用户输入的密码
        String password = userFromDB.getPassword(); //数据库里的密码（加密后的乱码）
        String salt = userFromDB.getSalt();//数据库里的盐
        // 加密用户输入的密码 + 数据库里的盐
        String md5String = Md5Utils.getMD5String(loginUserPassword + salt);

        if (!md5String.equals(password)){ // 对比两个乱码是否相等  （ 对比加密之后的结果）
            // 给登录页面返回一个错误提示
            model.addAttribute("error", "密码错误");
            return "login";
        }

        // 加密用户信息 得到令牌
        String token = JwtUtils.createToken(userFromDB);
        //把令牌放到cookie里    为了浏览器自动保存
        Cookie cookie = new Cookie("token", token);
        response.addCookie(cookie); //返回给浏览器

        // 告诉浏览器 去访问list.do
        return "redirect:list.do";

    }
}
